[DllImport("kernel32.dll", CharSet = CharSet.Auto,SetLastError = true))]
static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
public enum EXECUTION_STATE :uint
{
ES_SYSTEM_REQUIRED = 0x00000001,
ES_DISPLAY_REQUIRED = 0x00000002,
// Legacy flag, should not be used.
// ES_USER_PRESENT = 0x00000004,
ES_CONTINUOUS = 0x80000000,
}
There is no need to store the state you set, Windows remembers it for you. Just set it back to ES_CONTINUOUS when you don't want it anymore.
Also note that this setting is per thread/application not global, so if you go to ES_CONTINUOUS and another app/thread is still setting ES_DISPLAY the display will be kept on.
Please add some!
void PreventMonitorPowerdown ()
{
SetExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED |
EXECUTION_STATE.ES_CONTINUOUS);
}
void AllowMonitorPowerdown ()
{
SetExecutionState(EXECUTION_STATE.ES_CONTINUOUS);
}
Do you know one? Please contribute it!